home *** CD-ROM | disk | FTP | other *** search
/ Pascal Super Library / Pascal Super Library (CW International)(1997).bin / GAMES / P_ROBO31 / NOVA.PR < prev    next >
Text File  |  1989-10-30  |  4KB  |  163 lines

  1. (**************************************************************************)
  2. (*                             W A R N I N G                              *)
  3. (*                                                                        *)
  4. (*  This Robot has NOT been designed to take advantage of the advanced    *)
  5. (*  features of P-ROBOTS, such as, Shields, Fuel, Teams or Obstructions.  *)
  6. (**************************************************************************)
  7.  
  8.   PROCEDURE Nova;
  9.  
  10. { Team Robot NOVA.  Designed and programmed by Mark Dash and Frank Yetnick
  11.   Travels in a star pattern at top speed.  Avoids corners 
  12.   while still maintaining a long path.  
  13. }
  14.  
  15.   VAR Dir : Integer;
  16.     Ang : Integer;
  17.     Dist : Integer;
  18.     Width : Integer;
  19.     Incr : Integer;
  20.  
  21.  
  22.  
  23.   BEGIN                           { Main routine }
  24.  
  25.     Dir := 0;
  26.     Width := 10;
  27.     Incr := 20;
  28.     Ang := Angle_To(1000, 1000);
  29.  
  30.     REPEAT                        { Main loop }
  31.  
  32.       WHILE (loc_y < 900) DO
  33.         BEGIN
  34.           DRIVE(Ang, 100);
  35.           Dist := SCAN(Dir, Width);
  36.           IF Dist > 50 THEN
  37.             BEGIN
  38.               CANNON(Dir, Dist);
  39.               CANNON(Dir, Dist);
  40.             END
  41.           ELSE
  42.             Dir := Dir+Incr;
  43.         END;
  44.       DRIVE(Ang, 40);
  45.       Ang := Angle_To(500, 0);
  46.       WHILE (speed > 40) DO Ang := Angle_To(500, 0);
  47.  
  48.       WHILE (loc_y > 200) DO
  49.         BEGIN
  50.           DRIVE(Ang, 100);
  51.           Dist := SCAN(Dir, Width);
  52.           IF Dist > 50 THEN
  53.             BEGIN
  54.               CANNON(Dir, Dist);
  55.               CANNON(Dir, Dist);
  56.             END
  57.           ELSE
  58.             Dir := Dir+Incr;
  59.         END;
  60.       DRIVE(Ang, 40);
  61.       Ang := Angle_To(0, 1000);
  62.       WHILE (speed > 40) DO Ang := Angle_To(0, 1000);
  63.  
  64.       WHILE (loc_x > 100) DO
  65.         BEGIN
  66.           DRIVE(Ang, 100);
  67.           Dist := SCAN(Dir, Width);
  68.           IF Dist > 50 THEN
  69.             BEGIN
  70.               CANNON(Dir, Dist);
  71.               CANNON(Dir, Dist);
  72.             END
  73.           ELSE
  74.             Dir := Dir+Incr;
  75.         END;
  76.       DRIVE(Ang, 40);
  77.       Ang := Angle_To(1000, 500);
  78.       WHILE (speed > 40) DO Ang := Angle_To(1000, 500);
  79.  
  80.       WHILE (loc_x < 800) DO
  81.         BEGIN
  82.           DRIVE(Ang, 100);
  83.           Dist := SCAN(Dir, Width);
  84.           IF Dist > 50 THEN
  85.             BEGIN
  86.               CANNON(Dir, Dist);
  87.               CANNON(Dir, Dist);
  88.             END
  89.           ELSE
  90.             Dir := Dir+Incr;
  91.         END;
  92.       DRIVE(Ang, 40);
  93.       Ang := Angle_To(0, 0);
  94.       WHILE (speed > 40) DO Ang := Angle_To(0, 0);
  95.  
  96.       WHILE (loc_y > 100) DO
  97.         BEGIN
  98.           DRIVE(Ang, 100);
  99.           Dist := SCAN(Dir, Width);
  100.           IF Dist > 50 THEN
  101.             BEGIN
  102.               CANNON(Dir, Dist);
  103.               CANNON(Dir, Dist);
  104.             END
  105.           ELSE
  106.             Dir := Dir+Incr;
  107.         END;
  108.       DRIVE(Ang, 40);
  109.       Ang := Angle_To(500, 1000);
  110.       WHILE (speed > 40) DO Ang := Angle_To(500, 1000);
  111.  
  112.       WHILE (loc_y < 800) DO
  113.         BEGIN
  114.           DRIVE(Ang, 100);
  115.           Dist := SCAN(Dir, Width);
  116.           IF Dist > 50 THEN
  117.             BEGIN
  118.               CANNON(Dir, Dist);
  119.               CANNON(Dir, Dist);
  120.             END
  121.           ELSE
  122.             Dir := Dir+Incr;
  123.         END;
  124.       DRIVE(Ang, 40);
  125.       Ang := Angle_To(1000, 0);
  126.       WHILE (speed > 40) DO Ang := Angle_To(1000, 0);
  127.  
  128.       WHILE (loc_x < 900) DO
  129.         BEGIN
  130.           DRIVE(Ang, 100);
  131.           Dist := SCAN(Dir, Width);
  132.           IF Dist > 50 THEN
  133.             BEGIN
  134.               CANNON(Dir, Dist);
  135.               CANNON(Dir, Dist);
  136.             END
  137.           ELSE
  138.             Dir := Dir+Incr;
  139.         END;
  140.       DRIVE(Ang, 40);
  141.       Ang := Angle_To(0, 500);
  142.       WHILE (speed > 40) DO Ang := Angle_To(0, 500);
  143.  
  144.       WHILE (loc_x > 200) DO
  145.         BEGIN
  146.           DRIVE(Ang, 100);
  147.           Dist := SCAN(Dir, Width);
  148.           IF Dist > 50 THEN
  149.             BEGIN
  150.               CANNON(Dir, Dist);
  151.               CANNON(Dir, Dist);
  152.             END
  153.           ELSE
  154.             Dir := Dir+Incr;
  155.         END;
  156.       DRIVE(Ang, 40);
  157.       Ang := Angle_To(1000, 1000);
  158.       WHILE (speed > 40) DO Ang := Angle_To(1000, 1000);
  159.  
  160.     UNTIL DEAD;
  161.  
  162.   END;                            { End Nova Main }
  163.